package com.hanbang.chu_xing_gao_zhao.utils;

import android.content.Context;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;

/**
 * 获取定位
 *
 * @author yang
 */
public class MyLocationUtils {
    public locationCallback lCallback = null;

    public String myLocation = "";

    /**
     * 类是定位SDK的核心类
     */
    public LocationClient mLocationClient = null;

    /**
     * 接口有1个方法需要实现： 1.接收异步返回的定位结果，参数是BDLocation类型参数。
     */
    public BDLocationListener myListener = new MyLocationListener();

    public MyLocationUtils(Context context) {

        mLocationClient = new LocationClient(context); // 声明LocationClient类
        mLocationClient.registerLocationListener(myListener); // 注册监听函数
        initLocation();
    }

    /**
     * 设置定位参数包括：定位模式（高精度定位模式，低功耗定位模式和仅用设备定位模式），返回坐标类型，是否打开GPS，是否返回地址信息、位置语义化信息、
     * POI信息等等。
     */
    public void initLocation() {
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationMode.Hight_Accuracy);// 可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        option.setCoorType("bd09ll");// 可选，默认gcj02，设置返回的定位结果坐标系
        int span = 1000;
        option.setScanSpan(span);// 可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(true);// 可选，设置是否需要地址信息，默认不需要
        option.setOpenGps(true);// 可选，默认false,设置是否使用gps
        option.setLocationNotify(false);// 可选，默认false，设置是否当gps有效时按照1S1次频率输出GPS结果
        option.setIsNeedLocationDescribe(false);// 可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
        option.setIsNeedLocationPoiList(true);// 可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);// 可选，默认false，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认杀死
        option.SetIgnoreCacheException(false);// 可选，默认false，设置是否收集CRASH信息，默认收集
        option.setEnableSimulateGps(false);// 可选，默认false，设置是否需要过滤gps仿真结果，默认需要

        mLocationClient.setLocOption(option);
        mLocationClient.start();
    }

    /**
     * 取消定位
     */
    public void stop() {
        mLocationClient.stop();
    }

    /**
     * 定位的监听
     *
     * @author yang
     */
    public class MyLocationListener implements BDLocationListener {

        @Override
        public void onReceiveLocation(BDLocation location) {
            // 定位的位置是： 省，市，区，街
//			myLocation = location.getProvince() + "-" + location.getCity() + "-" + location.getDistrict() + "-"
//					+ location.getStreet();

            // 定位的位置是： 省，市，区，街
            myLocation = location.getCity() + "- " + location.getStreet();

            // 设置回调内容
            if (lCallback != null) {
                lCallback.onClick(myLocation, location.getLongitude(), location.getLatitude());
            }

        }

    }

    /**
     * 接口
     *
     * @author yang
     */
    public interface locationCallback {
        public void onClick(String location, double longitude, double latitude);
    }

    /**
     * 回调方法
     *
     * @param location
     */
    public void setOnClickCallback(locationCallback location) {
        lCallback = location;
    }

}